From: Carlos Garnacho Date: Fri, 29 May 2020 14:59:46 +0000 (+0200) Subject: padOsd: Keep label coordinates in image coordinates X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~684^2^2~333 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=8a89de04a236a645e3460d023a6b1822f46d7567;p=gnome-shell.git padOsd: Keep label coordinates in image coordinates Apply the necessary transforms to map those coordinates to actor positions in the allocate phase. This all fits since it's the place where we do know the size the actor will have. https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1290 --- diff --git a/js/ui/padOsd.js b/js/ui/padOsd.js index 8aadf5114..3d825f9ed 100644 --- a/js/ui/padOsd.js +++ b/js/ui/padOsd.js @@ -411,9 +411,6 @@ var PadDiagram = GObject.registerClass({ } _updateDiagramScale() { - if (this._handle == null) - return; - [this._actorWidth, this._actorHeight] = this.get_size(); let dimensions = this._handle.get_dimensions(); let scaleX = this._actorWidth / dimensions.width; @@ -426,6 +423,11 @@ var PadDiagram = GObject.registerClass({ let [, natWidth] = child.get_preferred_width(natHeight); let childBox = new Clutter.ActorBox(); + // I miss Cairo.Matrix + let dimensions = this._handle.get_dimensions(); + x = x * this._scale + this._actorWidth / 2 - dimensions.width / 2 * this._scale; + y = y * this._scale + this._actorHeight / 2 - dimensions.height / 2 * this._scale; + if (direction == LTR) { childBox.x1 = x; childBox.x2 = x + natWidth; @@ -441,6 +443,9 @@ var PadDiagram = GObject.registerClass({ vfunc_allocate(box) { super.vfunc_allocate(box); + if (this._handle === null) + return; + this._updateDiagramScale(); for (let i = 0; i < this._labels.length; i++) { @@ -476,17 +481,6 @@ var PadDiagram = GObject.registerClass({ cr.$dispose(); } - _transformPoint(x, y) { - if (this._handle == null || this._scale == null) - return [x, y]; - - // I miss Cairo.Matrix - let dimensions = this._handle.get_dimensions(); - x = x * this._scale + this._actorWidth / 2 - dimensions.width / 2 * this._scale; - y = y * this._scale + this._actorHeight / 2 - dimensions.height / 2 * this._scale; - return [Math.round(x), Math.round(y)]; - } - _getItemLabelCoords(labelName, leaderName) { if (this._handle == null) return [false]; @@ -514,9 +508,7 @@ var PadDiagram = GObject.registerClass({ pos.y = this._imageHeight - pos.y; } - let [x, y] = this._transformPoint(pos.x, pos.y); - - return [true, x, y, direction]; + return [true, pos.x, pos.y, direction]; } _getButtonLabels(button) {